home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / bfit_fv < prev    next >
Internet Message Format  |  1995-03-31  |  21KB

  1. From: Fredrik Viklund <fv@LINK.Physchem.KTH.SE>
  2. Subject:  v04i028:  bfit_fv - Flexible Least Square Fit v1.2, Part01/01
  3. Newsgroups: comp.sources.hp48
  4. Organization: Royal Institute of Technology, Stockholm
  5. Followup-To: comp.sys.hp48
  6. Approved: spell@seq.uncwil.edu
  7.  
  8. Checksum: 3297968093 (verify with brik -cv)
  9. Submitted-by: Fredrik Viklund <fv@LINK.Physchem.KTH.SE>
  10. Posting-number: Volume 4, Issue 28
  11. Archive-name: bfit_fv/part01
  12.  
  13. BEGIN_DOC bfit.doc
  14.  
  15. Abstract:
  16. ~~~~~~~~~
  17.         Best Fit 1.2 is a user RPL-program that least-square-fits
  18.         a function to data points stored in SIGMADAT.
  19.         Best Fit 1.2 makes it easy to fit a (customized)
  20.         polynomial. It is possible to fit any function (with
  21.         some restrictions) to data.
  22.  
  23. Features:
  24. ~~~~~~~~~
  25.     o Userdefined function least square fit
  26.     o Simplified plots
  27.     o Easy to customize to fit your needs
  28.  
  29.  
  30. Preface:
  31. ~~~~~~~~
  32. Some time ago I wanted to fit a polynomial to some data. I then realized
  33. that HP hadn't included that possibility in the '48. As I had some time
  34. to spend, I wrote a simple routine that could fit a
  35. polynom to a set of data. As this was my first "more-than-5-
  36. lines-program"-project I changed it over and over again to see if I
  37. could use some more predefined functions from the manuals... (Mostly,
  38. the changes were made sitting in a bus on my way to school!)
  39.  
  40.  
  41. Copyright:
  42. ~~~~~~~~~~
  43. This program and documentation is (c) march 1992 Fredrik Viklund. If you
  44. find it worthwile to use this program you have my permission to change
  45. it on one condition! If you make any changes you have to change the
  46. first line in ABOUT to "Modified Best Fit" and the version number to
  47. "1.2m". If you distribute this program, please include the whole
  48. unmodified directory and this documentation.
  49.  
  50.  
  51.  
  52. Disclaimer:
  53. ~~~~~~~~~~~
  54. By using this program or reading more of this document I, the reader or
  55. user agrees that the author, Fredrik Viklund has no responsibility
  56. whatever of the results of the use of this program.
  57.  
  58.  
  59. Introstructions:
  60. ~~~~~~~~~~~~~~~~
  61. 1. Download BFIT12 to your HP48
  62. 2. Press BFIT - a menu appears
  63. (3. Press softkey 1 (A) to go to STAT menus, enter data in SIGMADAT, or
  64.     enter matrix and stor in SIGMADAT by pressing leftshift SIGMADAT.
  65.     There already are some data stored, so you don't have to enter data
  66.     right now. Then press right-shift SIGMADAT (softkey 1) to display
  67.     SIGMADAT)
  68. 4. Press FIT to fit data to function
  69. 5. Enter how many terms you want in your expression. Note that there
  70.    are three terms in a second degree polynomial (including a constant).
  71. 6. Press right-shift FIT to see matrix of least square fitted
  72.    coefficients.
  73. 7. Press ->EQ to make a readable equation of the coefficients. Press
  74.    right-shift ->EQ to see EQ were it is now stored. (Left-shift ->EQ
  75.    will store expression in level 1 in EQ.)
  76. 8. Press SCATR to make a scatterplot of data.
  77. 9. Press ATTN to return to plot menu.
  78. 10. Press FUNC to plot fitted function EQ.
  79. 11. Press ATTN to return to plot menu.
  80. 12. Press EXIT to return to main menu.
  81. 13. Press ABOUT to see name, version, copyright, my name and adress.
  82. 14. If you still reads this, press ATTN to leave ABOUT, then press OPERS
  83.     and EDIT.
  84. 15. Add \<< ln \>> as the 4th element (between \<< 2 ^ \>> and
  85.     \<< 3 ^ \>> ) and exit EDIT by pressing ENTER
  86. 16. Store new operators in OPER by pressing right-shift OPERS
  87. 17. Repeat steps 4 to 10 (use 4 or more terms in step 5)
  88. 18. Note the differences, and that EQ now contains a 'ln'-term.
  89.  
  90.  
  91. Additional notes:
  92. ~~~~~~~~~~~~~~~~~
  93. In menus: SCATR erases PICT and makes a autoscaled scatterplot
  94.     rightshifted SCATR plots data "as is"
  95.     FUNC plots function on current PICT (no ERASE)
  96.  
  97. It is not possible to fit such things as c1*SIN(c2*X) due to the method.
  98. Only expressions like c*SIN(X) will work. (I think...)
  99. These more spectacular functions may have their value if you want to fit
  100. a smooth curve to you scatter.
  101.  
  102. Perhaps there are some undocumented features, but I leave that for you
  103. to find out. I have already written too much...
  104.  
  105.  
  106. Feed-Back:
  107. ~~~~~~~~~~
  108. I would really appreciate if you let me know if you need, use or delete
  109. this program. 
  110.  
  111. +------------------------------------------------------+
  112. | Fredrik Viklund                   FV@Chemstud.KTH.SE |
  113. | Bussvaegen 5                                         |
  114. | S-132 43  SALTSJO-BOO                                |
  115. | SWEDEN                                               |
  116. +------------------------------------------------------+
  117.  
  118.  
  119. O  /
  120.  \/
  121.  /\~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  122. O  \
  123.  
  124.  
  125. END_DOC
  126.  
  127. BEGIN_RPL bfit.rpl
  128. %%HP: T(3)A(R)F(.);
  129. DIR
  130.   BFIT                      @ Kind of a shell
  131.     \<< { { "\GSDAT" {      @ 1st key
  132.       \<< 40 MENU           @ normal: goto STAT-menu
  133.       \>>                   @
  134.       \<< STO\GS            @ lshift: STO in \SIGMA-DAT
  135.       \>>                   @
  136.       \<< RCL\GS            @ rshift: RCL \SIGMA-DAT
  137.       \>> } } { "FIT"       @ 2nd key
  138. {                           @
  139.       \<<                   @
  140. "Number of terms
  141. in expression:"
  142. "" INPUT OBJ\-> FIT         @ normal: prompt and run FIT
  143.       \>>                   @
  144.       \<<                   @ lshift: NOOP
  145.       \>>                   @
  146.       \<< RESULT            @ rshift: display RESULT
  147.       \>> } } {             @
  148. "OPERS" {                   @ 3rd key
  149.       \<< OPERS             @
  150.       \>>                   @
  151.       \<< 'OPERS' STO       @ normal: STO object in variable OPERS
  152.       \>> } } { "\->EQ"     @ 4th key
  153. { \->EQ                     @ normal: make EQ from REUSLT
  154.       \<< 'EQ' STO          @ lshift: STO object in EQ
  155.       \>> EQ } } {          @ rshift: recall EQ
  156. "PLOT" {                    @ 5th key (with submenu)
  157.       \<< { { "ERASE"       @ 1st key: erase PICT
  158. { ERASE } } {               @
  159. "SCATT" {                   @ 2nd key: scatter \SIGMA-DAT
  160.         \<< SCATRPLOT       @
  161. GRAPH                       @
  162.         \>>                 @
  163.         \<< SCATTER         @
  164. DRAW GRAPH                  @
  165.         \>> } } {           @
  166. "FUNC"                      @ 3rd key: draw EQ
  167.         \<< FUNCTION        @
  168. DRAX DRAW GRAPH             @
  169.         \>> } "" {          @ 4th key: NOOP
  170. "EXIT" BFIT } }             @ 5th key: return to main menu
  171. TMENU                       @
  172.       \>> } } {             @
  173. "ABOUT" { ABOUT } }         @ 6th key: ABOUT BFIT
  174. } TMENU                     @
  175.     \>>                     @
  176.   OPERS {                   @ Sample variable OPERS
  177.     \<< 0 ^                 @ Contains the functions that form
  178.     \>>                     @ EQ.
  179.     \<< 1 ^                 @
  180.     \>>                     @ In this case the first three terms
  181.     \<< 2 ^                 @ will be X raised to 0, 1 and 2. Then
  182.     \>>                     @ SIN, EXP and 1/X -terms will be added.
  183.     \<< 3 ^                 @
  184.     \>>                     @ If you omitt OPERS, FIT will make a
  185.     \<< 4 ^                 @ "pure" polynomial (X raised to 0, 1, 2
  186.     \>>                     @ etc). Also if you specify 3 elements in
  187.     \<< 5 ^                 @ OPERS and a 6 element-expression, FIT
  188.     \>>                     @ will use the three specified expressions
  189.     \<< SIN                 @ and then add X^(element number)
  190.     \>>                     @
  191.     \<< TAN                 @ If you want to fit c0+c1*X^0.5+c2*X
  192.     \>>                     @ OPERS would be:
  193.     \<< 8 ^                 @ { \<< 0 ^ \>> \<< 0.5 ^ \>> \<< 1 ^ \>> }
  194.     \>>                     @
  195.     \<< 9 ^                 @
  196.     \>>                     @
  197.     \<< 10 ^                @
  198.     \>> }                   @
  199.   FIT                       @ "Main" program
  200.     \<< \-> TERMS           @ Get number of terms from level 1
  201.       \<< BFPAR 1           @ Store in 1st pos of PFPAR
  202. TERMS PUT 'BFPAR'           @
  203. STO                         @
  204.         IF \GSDAT           @ Check if \SIGMA-DAT is matrix (real
  205. TYPE 3 \=/ \GSDAT TYPE      @ or complex).
  206. 4 \=/ AND                   @
  207.         THEN # 601h         @
  208. DOERR                       @ Else "Invalid \SIGMA Data"
  209.         END \GSPAR 2        @ Get independent data column from \SIGMA-PAR
  210.         IFERR GET           @ If \SIGMA-PAR does not exist: create
  211.         THEN { 1 2          @
  212. 0 0 LINFIT } '\GSPAR'       @
  213. STO GET                     @
  214.         END \GSPAR 1        @
  215. GET \-> YCOLU XCOLU         @ Store columns in YCOLU and XCOLU
  216.         \<< TERMS           @
  217. \GSDAT SIZE OBJ\-> DROP     @
  218. DROP \-> JSIZE ISIZE        @ Store dimensions of Vandermonde matrix
  219.           \<< 1 ISIZE       @ as ISIZE and JSIZE
  220.             FOR I           @
  221. \GSDAT { I XCOLU }          @
  222. GET \-> XI                  @ Get one element at a time. STO as Xi
  223.               \<< 0         @
  224. TERMS 1 -                   @ Execute the right OPERS-operation
  225. FOR J XI                    @ or raise to its j-th power
  226.   IFERR OPERS J 1 +         @
  227. GET EVAL                    @
  228.   THEN DROP DROP J          @
  229. ^                           @
  230.   END                       @
  231. NEXT                        @
  232.               \>>           @
  233.             NEXT {          @
  234. ISIZE JSIZE } \->ARRY       @ When finished with all elements:
  235. 1 ISIZE                     @ make array (Vandermonde matrix)
  236.             FOR I           @
  237. \GSDAT { I YCOLU }          @ Extract dependent data from Y-column
  238. GET                         @ of \SIGMA-DAT
  239.             NEXT {          @
  240. ISIZE 1 } \->ARRY           @
  241.           \>> \-> XDAT      @ Store as XDAT and YDAT
  242. YDAT                        @
  243.           \<< XDAT          @ Calculation:
  244. TRN YDAT * XDAT TRN         @ TRN(X)*X*c = TRN(X)*Y
  245. XDAT * \-> Y X              @ c is the least-square-fitted coefficients
  246.             \<< Y X /       @ in matrix format
  247. Y X 3 PICK RSD X /          @ Increase precision
  248. +                           @
  249.             \>>             @
  250. 'RESULT' STO                @ Store c in RESULT variable
  251.           \>>               @
  252.         \>>                 @
  253.       \>>                   @
  254.     \>>                     @
  255.   RESULT                    @
  256. [[ 1.00000006486 ]          @
  257.  [ .999999927664 ]          @
  258.  [ 1.00000000666 ]          @
  259.  [ 1.00000008129 ]]         @
  260.   \->EQ                     @
  261.     \<< -3 FS?              @
  262.       IFERR PPAR 3          @ Make EQ-program
  263. GET PPAR 7 GET              @ Symbolic evaluation set?
  264.       THEN DROP             @ Get independent and dependent variables
  265. DROP 'X' 'Y'                @ If nonexistant: assume 'X' and 'Y'
  266.       END BFPAR 1           @
  267. GET \-> FLAG3 INDVAR        @
  268. DEPVAR TERMS                @
  269.       \<< -3 CF             @ Store as FLAG3, INDVAR and DEPVAR
  270. RESULT OBJ\-> DROP          @
  271. TERMS 1                     @ Set symbolic evaluation
  272.         FOR K               @ Some magic performed on RESULT
  273. INDVAR                      @ Principle: perform OPERS on INDEP,
  274.           IFERR             @ multiply with coefficient and add
  275. OPERS K GET EVAL            @ together
  276.           THEN DROP         @
  277. DROP K 1 - ^                @
  278.           END * K           @
  279. ROLLD -1                    @
  280.         STEP 1              @
  281. TERMS 1 -                   @
  282.         FOR K SWAP          @
  283. +                           @
  284.         NEXT 'EQ'           @
  285. STO                         @
  286.         IF FLAG3 1          @
  287. ==                          @ Store in EQ
  288.         THEN -3 SF          @ Restore flag -3 as found earlier
  289.         END                 @
  290.       \>>                   @
  291.     \>>                     @
  292.   EQ '1.00000006486         @ Sample Equation
  293. +.999999927664*X+           @
  294. 1.00000000666*X^2+          @
  295. 1.00000008129*LN(X)         @
  296. '                           @
  297.   \GSDAT                    @ Sample \SIGMA-DAT
  298. [[ 1 -7 ]            @
  299.  [ 2 -33.5342640972 ]        @
  300.  [ 3 -83.5069385566 ]        @
  301.  [ 4 -156.068528194 ]        @
  302.  [ 5 -250.952810438 ]        @
  303.  [ 6 -368.041202654 ]]        @
  304.   \GSPAR { 1 2 0 0          @ Sample \SIGMA-PAR
  305. LINFIT }                    @
  306.   PPAR {                    @ Sample PPAR
  307. (1,-1.44141568686)          @
  308. (5,32.6094379124) X         @
  309. 0 (0,0) FUNCTION Y          @
  310. }                           @
  311.   BFPAR { 4 }               @ Sample BFPAR (contains number of terms)
  312.   ABOUT                     @ About BFIT
  313.     \<< CLLCD               @
  314. "       Best Fit" 1         @
  315. DISP                        @
  316. "    ver 1.2  \169 1992"    @
  317. 3 DISP                      @
  318. "   Fredrik  Viklund"       @
  319. 5 DISP                      @
  320. "  FV@Chemstud.KTH.SE"      @
  321. 7 DISP 7 FREEZE             @
  322.     \>>                     @
  323. END                         @
  324.  
  325.  
  326. END_RPL
  327.  
  328. BEGIN_ASC bfit.asc
  329. %%HP: T(3)A(R)F(.);
  330. "69A20FF705D0000000501424F4554550D9D20E1632858A1C2A20320000202020
  331. 202020224563747026496479C2A2485A1C2A20B2000020202026756270213E22
  332. 302029A02139393233F2A2485A1C2A20B2000020202642756462796B60202659
  333. 6B6C657E646D13A2485A1C2A20D20000202646504348656D637475746E2B4458
  334. 4E23554743A2485A1743A24A5A193632B2130311005024640514255047A20803
  335. A2B2130D100040050514254047A2077920000000000000001000068686514144
  336. 19779200000000000000050100421973490623084E2010854B2A277920000000
  337. 00000000000000000000000000166E184E201095B21301A00040580514254047
  338. A209C2A2ED2A24B2A24B2A21B102B2130F20004058441445408E9209D0003392
  339. 0200006000020000000000000000001000000000000000790000000000000020
  340. 1002790462435339000000000000003010066558396053890000000000000040
  341. 2004918258606519000000000000005020083401825905290000000000000060
  342. 2004562021408639AE000205415208BA20339200006846000000010339209994
  343. 66729999999084E201085EEDA176BA133920000666000000001084E201085ED2
  344. A2D20B1EEDA176BA133920000921800000001084E201085F49B1EEDA176BA1B2
  345. 130EA00030D8541530D9D20E16320B3A2313C1FD332D9D2084E2040050514253
  346. F2A26C7D184E204005051425743A26C7D1B2130F1732D9D208DBF18DBF145632
  347. 84E201085976324563284E20109597632B21305DF2284E205024640514259C2A
  348. 26C7D11C432D6E205064C4147433D6E206094E444651425D6E20604454056514
  349. 25D6E2050455425D435E16320B3A25D2C184E206025543555C445B7FC18DBF1D
  350. 6E2050455425D4359C2A20A132D6E2010B4D6E206094E444651425FD332D9D20
  351. 84E2050F405542535D6E2010B46C7D1EB3A1B2130F1732D9D208DBF18DBF1D6E
  352. 2010B49C2A290DA1D20B1B21305DF22EEDA1D6E2010B40DCF1683A2083329C2A
  353. 2D6E2050455425D4359C2A290DA10A132D6E2010B4DBBF176BA1C42324563284
  354. E2020541597632DCC023CE22D6E205064C41474339C2A2279E1AFE22D9D200B3
  355. A2472C1B21305DF22EF53293632B2130892006025543555C445608E920950003
  356. 3920200004000010000000684600000001099946672999999900006660000000
  357. 0100009218000000010E60003064944530D9D20E16321C432D6E2050455425D4
  358. 35E163284E205024640514259C2A2D6E2050455425D435704D14563284E20502
  359. 46405142597632DCC023CE2284E20405844144568BC13F2A2D9AE184E2040584
  360. 4144568BC1803A2D9AE1387E1AFE22D9D20E4A20510001060000000000000933
  361. A1B21305DF2284E204058051425ED2A2FD3326C7D1F1732D9D2047A209C2A2ED
  362. 2A24B2A24B2A21B102B21304563284E20405805142597632DCC026C7D1B21305
  363. DF2284E2040580514259C2A26C7D11C432D6E20509534F4C455D6E20508534F4
  364. C455E1632D6E2050455425D43584E2040584414458B9C1B7FC18DBF18DBF11C4
  365. 32D6E2050A43594A554D6E2050943594A554E16329C2A2D6E2050943594A5540
  366. A132D6E20109484E20405844144547A20D6E201094D6E20508534F4C455B2130
  367. 6C7D11C432D6E20208594E16324B2A2D6E2050455425D4359C2A290DA10A132D
  368. 6E2010A4D6E20208594FD332D9D2084E2050F405542535D6E2010A49C2A276BA
  369. 16C7D1EB3A1B2130F1732D9D208DBF18DBF1D6E2010A4D20B1B21305DF22C423
  370. 2EF532C423247A20D6E2050943594A554D6E2050A43594A554B2130900D19C2A
  371. 2D6E2050943594A5540A132D6E20109484E20405844144547A20D6E201094D6E
  372. 20509534F4C455B21306C7D1C423247A20D6E2050943594A5549C2A2B2130900
  373. D1EF5321C432D6E204085441445D6E204095441445E1632D6E20408544144529
  374. 3D1D6E204095441445EEDA1D6E204085441445293D1D6E204085441445EEDA11
  375. C432D6E201095D6E201085E1632D6E201095D6E20108550FA1D6E201095D6E20
  376. 10853F2A2A9CF1E30C1D6E20108550FA176BA1EF5324563284E206025543555C
  377. 44597632DCC02EF532EF532EF53293632B2130E050050F4055425355047A20D9
  378. D20E16324B2A2D20B193632B2130D9D20E16329C2A2D20B193632B2130D9D20E
  379. 1632ED2A2D20B193632B2130D9D20E16323F2A2D20B193632B2130D9D20E1632
  380. 803A2D20B193632B2130D9D20E1632D13A2D20B193632B2130D9D20E1632CA4B
  381. 193632B2130D9D20E1632E55B193632B2130D9D20E1632C53A2D20B193632B21
  382. 30D9D20E1632173A2D20B193632B2130D9D20E1632339201000000000000010D
  383. 20B193632B2130B213086100402464944540D9D20E163247A2047A20C2A20D00
  384. 005844144547A20D9D20E16323392010000000000000406911293632B2130D9D
  385. 20E1632B0DF193632B2130D9D20E163264DF193632B2130B2130B213047A20C2
  386. A20B000064944547A20D9D20E1632C2A2014000E457D626562702F6660247562
  387. 7D637A096E6025687072756373796F6E6A3C2A2050000AC422B7FC184E203064
  388. 944593632B2130D9D20E163293632B2130D9D20E163284E206025543555C4459
  389. 3632B2130B2130B213047A20C2A20F0000F40554253547A20D9D20E163284E20
  390. 50F40554253593632B2130D9D20E16324563284E2050F40554253597632DCC02
  391. 93632B2130B2130B213047A20C2A20B0000D8541547A2084E2030D85415D9D20
  392. E16324563284E2020541597632DCC0293632B213084E20205415B2130B213047
  393. A20C2A20D000005C4F44547A20D9D20E163247A2047A20C2A20F000054251435
  394. 5447A20F52E1B2130B213047A20C2A20F0000353414454547A20D9D20E1632C8
  395. 102AB2E193632B2130D9D20E1632107E1091E1AB2E193632B2130B2130B21304
  396. 7A20C2A20D00006455E434D9D20E1632166E16C1E1091E1AB2E193632B2130B2
  397. 130C2A205000047A20C2A20D00005485944584E204024649445B2130B2130D51
  398. 1293632B2130B2130B213047A20C2A20F00001424F4554547A2084E20501424F
  399. 45545B2130B2130B2130D511293632B21304177"
  400. END_ASC
  401.  
  402. BYTES: #7714h 2234
  403.  
  404. BEGIN_UU bfit.uue
  405. begin 644 bfit
  406. M2%!(4#0X+466*O!_4`T````%04)/550%G2W@82-8J,&B`B,```("`@("`B)4
  407. M-D<'8I1&ERPJA*7!H@(K```"`@)B5R8'$N,B`P*2"A*3DR,S+RJ$I<&B`BL`
  408. M``("8B171B:7M@8"8I6VQE;G1M8Q*H2EP:("+0```F)D!32$5M8V1U='YK)$
  409. MA>0R570T*H2E<30JI*618R,K,3`1``5"1E!!4@5T*H`P*BLQT`$`!%!005($
  410. M="IPEP(``````````0!@:&@5%$21=RD`````````4!``))$WE&`R@.0"`5BT
  411. MHG*7`@````````````````````!AYH'D`@%9*S$0"@`$A5!!4@1T*I`L*MZB
  412. M0BLJM*(2&R`K,?`"``2%1$%4!.@ID`T`,RD@```&`"`````````````!````
  413. M`````)<``````````@$@ET`F-#63``````````,!8%:%DP8UF``````````$
  414. M`D`9*(4&5I$`````````!0*`0Q`HE5"2``````````8"0&4"$@1HD^H`(%`4
  415. M)8"K`C,I``"&9````!`PDP*9268GF9F9"4@N$(#EWAIGJS&3`@!@9@`````!
  416. M2"X0@.4M*BVPX=X:9ZLQDP(`D!((`````4@N$(#UE!ONK7&V&BLQX`H``XU%
  417. M40.=+>!A(["C,C$<WS/2V0)(+D``!14D-2\JQM>!Y`($4%!!4D>C8GP=*S'P
  418. M<2.=+8"]']C[064C2"X0@)5G(U0V@N0"`5EY-K(2`]4O@N0"!4)&4$%2R:)B
  419. M?!W!--+F`@5&3$%',VTN8)#D1&05)-7F`@9$15!605)M+E!`5235-.5A(["C
  420. M4BT<2"Y@(%4T5<5$M?<<V/O1Y@(%5$5235/)H@(:(VTN$+#4Y@(&24Y$5D%2
  421. MWS/2V0)(+E#P!%4D-=7F`@%+QM?A.QHK,?!Q(YTM@+T?V/O1Y@(!2\FBDM`:
  422. M+;"Q$@/5+^+>&FTN$+`$S1^&HP(X(\FBTN8"!51%4DU3R:*2T!J@,=+F`@%+
  423. MO?MQMAI,,D)E(T@N(%`4E6<CS0PR[")M+E!@Q!1T-),L*G+IH>\BG2T`.RIT
  424. MPK$2`]4OXE\C.3:R$@.8`F`@5315Q41E@)X"60`PDP("`$````$```"&9```
  425. M`!"0F61VDIF9F0``9@8````0```I@0```!#@!@`#1DE4`YTMX&$CP332Y@(%
  426. M5$5235,>-H+D`@5"1E!!4LFBTN8"!51%4DU3!]1!92-(+E`@9`05))5G(\T,
  427. M,NPB2"Y`4$@41&6X'/.BTJD>2"Y`4$@41&6X'`BCTJD>@^>A[R*=+>"D`A4`
  428. M$&````````"0,QHK,5#](D@N0%`(%23E+2K?,V)\'1\WTMD"="J0+"K>HD(K
  429. M*K2B$AL@*S%`92-(+D!0"!4DE6<CS0QB?!TK,5#](D@N0%`(%225+"K&UQ%,
  430. M(VTN4)`U],14U>8"!5A#3TQ5'C;2Y@(%5$5235-(+D!02!1$A9L<>\^!O1_8
  431. M^Q%,(VTN4*`TE:15U.8"!4E325I%'C:2+"IM+E"0-)6D500:(VTN$)"$Y`($
  432. MA41!5'0JT.8"`4EM+E"`-?3$5+42`\;7$4PC;2X@@)7D82.THM+F`@5415)-
  433. M4\FBDM`:H#'2Y@(!2FTN(("5]#TCG2V`Y`(%3U!%4E-M+A"@E"PJ9ZMA?!V^
  434. MH[$2`Q\WTMD"V/N!O1]M+A"@U`(;*S%0_2),,N)?(TPR0J<";2Y0D#25I%74
  435. MY@(%2E-)6D4K,9``'<FBTN8"!4E325I%H#'2Y@(!24@N0%!(%$1%IP)M+A"0
  436. MU.8"!5E#3TQ5*S%@?!U,,D*G`FTN4)`TE:15E"PJ*S&0`!W^-1),(VTN0(!%
  437. M%$35Y@($641!5!XVTN8"!%A$0522T]'F`@191$%4[JW1Y@($6$1!5)+3T>8"
  438. M!%A$053NK1%,(VTN$)#5Y@(!6!XVTN8"`5EM+A"`5?`:;2X0D-7F`@%8\Z*B
  439. MR1\^P-'F`@%8!:]QMAK^-4)E(T@N8"!5-%7%1)5G(\T,XE\C_C7B7R,Y-K(2
  440. M`PX%4/`$520U54"G`ITMX&$CM*+2`ALY-K(2`YTMX&$CR:+2`ALY-K(2`YTM
  441. MX&$CWJ+2`ALY-K(2`YTMX&$C\Z+2`ALY-K(2`YTMX&$C"*/2`ALY-K(2`YTM
  442. MX&$C':/2`ALY-K(2`YTMX&$CK+218R,K,=#9`AXVXE4;.3:R$@.=+>!A(URC
  443. MT@(;.3:R$@.=+>!A(W&CT@(;.3:R$@.=+>!A(S,I$````````!#0`ALY-K(2
  444. M`RLQ@!8`!$)&250$G2W@82-T*D"G`BPJT```A41!5'0JT-D"'C8RDP(!````
  445. M````!)81DF,C*S'0V0(>-K+0'SDVLA(#G2W@82-&_9%C(RLQL!(#*S%`IP(L
  446. M*K```$9)5'0JT-D"'C;"H@)!`.!4UR96)@?R9@9"5R;7-J>0Y@92A@<G5S8W
  447. ME_;FIL.B`@4`H$PB>\^!Y`(#1DE4.3:R$@.=+>!A(SDVLA(#G2W@82-(+F`@
  448. M5315Q4258R,K,;`2`RLQ0*<"+"KP``!/4$524W0JT-D"'C:"Y`(%3U!%4E,Y
  449. M-K(2`YTMX&$C5#:"Y`(%3U!%4E-Y-M+,(#DVLA(#*S&P$@-T*L"B`@L`T%@4
  450. M1:<"2"XPT%@4U=D"'C9"92-(+B!0%)5G(\T,DF,C*S&`Y`("15$K,;`2`W0J
  451. MP*("#0``Q?1$1:<"G2W@82-T*D"G`BPJ\```15)!4T5T*O`E'BLQL!(#="K`
  452. MH@(/`#`U%$1%1:<"G2W@82.,`:(K'CDVLA(#G2W@82,!YP$9'KKBD6,C*S&P
  453. M$@,K,4"G`BPJT```1E5.0YTMX&$C8>9A'!Z0X:$K'CDVLA(#*S'`H@(%`$"G
  454. M`BPJT```15A)5$@N0"!DE$2U$@,K,=`5(3DVLA(#*S&P$@-T*L"B`@\`$"3T
  455. =5$5%IP)(+E`0)/141;42`RLQL!(#71&28R,K,0`K
  456. `
  457. end
  458. END_UU
  459.